# ## 字符串操作
# 9. 编写程序，让用户输入一句话，统计并输出其中字母'e'出现的次数。

import time
strs9 = input("输入字符串:")
count = 0
for str9 in strs9:
    if str9 == "e":
        count = count + 1
print("e出现次数",count)
# 10. 编写程序，让用户输入一个字符串，然后将其反转输出。例如输入"hello"，输出"olleh"。
strs10 = input("输入字符串：")
strs10_temp = ""
for str10 in strs10:
    strs10_temp =  str10+ strs10_temp
print(strs10_temp)
# 10.1 使用\r实现进度条, \r 将光标移动至行的首位，新的输出会覆盖掉之前全部的输出
print("进度条展示：")
for i in range(101): #i从0到100
    bar = '['+'='*(i)+' '*(100-i)+']'
    print(f'\r{bar}{i:3}%',end='',flush=True)
    time.sleep(0.05)
'''关于字符串的输出，详见https://www.runoob.com/python3/python3-string.html'''
#换行的字符串
sql = '''
    create table sss{
        id int not null primary key,
        name varchar(100) not null,
    }
'''
#或者
sql = "create table sss{\
        id int not null primary key,\
        name varchar(100) not null,\
    }"
#一些不能输出的符号，比如\n
strs10_temp = r"\n\n\n\n\n\f\f\f\d\d"#最后频幕上会输出\n\n\n\n\n\f\f\f\d\d
print(strs10_temp)
# ## 列表操作
# 11. 创建一个列表`numbers = [1, 3, 5, 7, 9]`，完成以下操作：
#     - 在列表末尾添加数字11
#     - 在数字5后面插入数字4
#     - 删除数字7
#     - 打印修改后的列表
numbers = [1,3,5,7,9]#列表必须在声明的时候就明确，比如numbers[]
print(numbers,"在列表末尾添加数字11")
numbers.insert(3,4)
print("在数字5后面插入数字4",numbers)
numbers.remove(7)
print("删除数字7",numbers)
# 12. 编写程序，让用户输入5个数字，存储在列表中，然后找出列表中的最大值和最小值。
numbers12 = []#列表必须在声明的时候就明确
print()
for i in range(0,5):
    i12 = input(f"请输入第{i+1}个数：")
    numbers12.append(int(i12))#加入新元素
print(numbers12)
print("max=",max(numbers12))
print("min=",min(numbers12))
# 13. 编写程序，合并两个列表`list1 = [1, 2, 3]`和`list2 = [4, 5, 6]`，并去除重复元素（如果有）。
list1_13= [1, 2, 3] #列表声明，以[]
list2_13= [4, 5, 6]
hebing_13 = list1_13 + list2_13
print(hebing_13)
# ## 元组和集合
# 14. 创建一个元组`colors = ('red', 'green', 'blue')`，尝试修改第一个元素为'yellow'（观察错误），然后打印元组长度。
colors = ('red', 'green', 'blue')#元祖声明，以()
print(colors)
print(colors[0])
#colors[0] = 'yellow' #元组不支持更改
print(colors)
# 15. 创建两个集合`set1 = {1, 2, 3, 4}`和`set2 = {3, 4, 5, 6}`，计算并打印它们的并集、交集和差集。
"""集合是一种不允许数值变化、数值唯一、无序、不允许索引切片的数据结构，只允许数值和string、元祖（不可变的对象）。可以增加或减少元素"""
"""常用于：去重、极其快速的确定某个元素是否存在（每个数值都有唯一的哈希）、交并差计算"""
set1={1,2,3,4}
set2={3,4,5,6}
print("交集",set1&set2)
print("并集",set1|set2)
print("差集set1-set2",set1-set2)
# ## 字典操作
# 16. 创建一个字典`student = {'name': '李四', 'age': 20, 'major': '计算机'}`，完成以下操作：
#     - 添加一项'grade': 'A'
#     - 修改age为21
#     - 删除major
#     - 打印所有键
"""
dictionary is consist of element by (key,value)
key is unchangeable, unique 
dictionary is disordered 
"""
student = {'name':'xx','age':19,'major':'sss'}
student['grade'] = 'A'
print("增添字典元素",student)
student['age'] = 20
print("修改字典元素",student)
del student['major']
print("删除字典元素",student)
keys = student.keys()
print("all keys",keys)
# 17. 编写程序，统计字符串"abracadabra"中每个字母出现的次数，用字典表示。
str17 = "abracadabra"
set17 = set(str17)
dic17 = dict()#空字典
for ss in set17:
    count = 0
    for sss in str17:
        if sss == ss:
            count = count + 1
    dic17[ss] = count
print(str17,"appear count:",dic17)